home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 3 / United Public Domain Gold 3.iso / games / pg326.dms / pg326.adf / darts.bak.AMOS / darts.bak.amosSourceCode < prev    next >
AMOS Source Code  |  1978-02-21  |  12KB  |  464 lines

  1. ' ********************************** 
  2. ' *** PROGRAM BY PAUL WHITEHEAD  *** 
  3. ' ************ DARTS *************** 
  4. ' ********************************** 
  5. Set Buffer 100
  6. Cls 0 : Scroll Off 
  7. Dim TL(2) : Dim SET(2) : Dim LEG(2) : Dim D(3)
  8. Dim N$(10)
  9. Global X,Y,BB,SC,TL(),PL,SK,PR,N$(),OP,MIS,TURN,LEG(),SET(),BMUL,WIN
  10. Global SET,LEG,TDS,HIT,MIS,LHIT,D(),NT,AIM,TM,CD#,COMP,CR,CX,CY,FIN
  11. PL=1 : SK=1 : PR=0 : OP=2 : SET=3 : LEG=3
  12. Goto SETUP
  13. Stop 
  14. Procedure SETUP
  15.   N$(1)="Player 1" : N$(2)="Player 2"
  16.   N$(3)="Phil   " : N$(4)="John   " : N$(5)="Eric   "
  17.   N$(6)="Mark   " : N$(7)="Ian    " : N$(8)="Richard"
  18.   N$(9)="Peter  " : N$(10)="Norman "
  19.   Hide On 
  20.   Close Editor 
  21.   Flash Off 
  22.   Get Rom Fonts 
  23.   Screen Open 1,320,256,64,Lowres : Cls 0
  24.   Screen Open 2,320,256,32,Lowres : Cls 0
  25.   Screen To Front 0 : Cls 0 : Screen 0
  26. End Proc
  27. SETUP:
  28.   SETUP
  29.   DART
  30.   TITLE
  31.   Pack 0 To 2
  32.   MENU
  33.   BOARD
  34.   RESTART
  35.   Goto GAME
  36. NEW:
  37.  M: If Mouse Key=1 Then Goto MU
  38.  Goto M
  39.  MU: MENU
  40.  RESTART
  41. Goto GAME
  42. Procedure BOARD
  43.   Load Iff "DART:Screens/BOARD",1
  44. End Proc
  45. Procedure TITLE
  46.   Load Iff "dart:screens/title",2
  47. End Proc
  48. Procedure DART
  49.   Load "dart:sprites/ds1.abk"
  50. End Proc
  51. Procedure AIM
  52.   Sprite 2,X Mouse,Y Mouse,2
  53.   Bob 1,X Screen(X Mouse)+32,Y Screen(Y Mouse)+32,10 : Update 
  54.   Rem Main loop
  55.   Do 
  56.     Rem Move sprite along with mouse 
  57.     Sprite 1,X Mouse,Y Mouse,1
  58.     Rem Move bob 
  59.     Bob 1,X Screen(X Mouse)+32,Y Screen(Y Mouse)+32,10
  60.     Locate 0,1 : Print "                        "
  61.     Locate 0,1 : Print X Mouse;" ";Y Mouse
  62.     If Mouse Key=1 Then Update 
  63.     If Mouse Key=2 Then Stop 
  64.     Wait Vbl 
  65.   Loop 
  66. End Proc
  67. '
  68. POSITION:
  69.   COMP=0
  70.   If PL=1 and TURN=2 Then COMP=1
  71.   Timer=0
  72.   If COMP=1 Then COMPO
  73. POSITION
  74. Return 
  75. '
  76. Procedure POSITION
  77.   R=1
  78.   If R=1 Then Goto 9
  79.   Rem
  80.   X=176 : Y=97
  81.   Do 
  82.     Locate 2,28 : Print "                                  "
  83.     Locate 2,28 : Print "    x= ";(-95+X);"   y= ";95-(Y-13)
  84.     Ink 16 : Plot X,Y
  85.     Wait 30
  86.     If Inkey$="q" Then Ink 0 : Plot X,Y : Y=Y-1
  87.     If Inkey$="a" Then Ink 0 : Plot X,Y : Y=Y+1
  88.     If Inkey$="o" Then Ink 0 : Plot X,Y : X=X-1
  89.     If Inkey$="p" Then Ink 0 : Plot X,Y : X=X+1
  90.   Loop 
  91.   Rem
  92.   9 Rem----------------------width 
  93.   XW=6+SK : CX=CX : YW=8 : A=1
  94.   Wait 10
  95.   Do 
  96.     If A=1 Then Ink 0 : Plot XW,YW : Plot XW,YW-1
  97.     If A=1 and SK=2 Then Plot XW-1,YW : Plot XW-1,YW-1
  98.     If A=0 Then Ink 15 : Plot XW,YW : Plot XW,YW-1
  99.     If A=0 and SK=2 Then Plot XW+1,YW : Plot XW+1,YW-1
  100.     If Mouse Key=1 Then Wait 10 : Goto 1
  101.     If CX=XW and COMP=1 Then Wait 5 : Goto 1
  102.     If A=1 Then XW=XW+SK : If XW>192 Then A=0 : If COMP=1 Then CX=CX+1
  103.     If A=0 Then XW=XW-SK : If XW<10 Then A=1
  104.   Loop 
  105.   Rem --------------------hight
  106.   1 XH=200 : YH=14+SK : CY=CY : A=1
  107.   Do 
  108.     If A=1 Then Ink 0 : Plot XH,YH : Plot XH+1,YH
  109.     If A=1 and SK=2 Then Plot XH,YH-1 : Plot XH+1,YH-1
  110.     If A=0 Then Ink 15 : Plot XH,YH : Plot XH+1,YH
  111.     If A=0 and SK=2 Then Plot XH,YH+1 : Plot XH+1,YH+1
  112.     If Mouse Key=1 Then Wait 10 : Goto 3
  113.     If CY=YH and COMP=1 Then Wait 5 : Goto 3
  114.     If A=1 Then YH=YH+SK : If YH>201-SK Then A=0 : If COMP=1 Then CY=CY+1
  115.     If A=0 Then YH=YH-SK : If YH<15+SK Then A=1
  116.   Loop 
  117.   Rem ---------------------throw 
  118.   3
  119.   MIS=0
  120.   'If SP<3 Then MIS=1 : Goto MISS
  121.   Goto HIT
  122.   MISS:
  123.   Noise To 3
  124.   Volume 5,63 : Mvolume 32
  125.   Set Envel 0,1 To 1,63
  126.   Set Envel 0,1 To 10,0
  127.   Play 1,15,3
  128.   RN=Rnd(1)+1
  129.   Bob BB,XW-13,YH-14,RN : Wait 50 : Bob Off BB
  130.   For N=(YH-5) To 250 : Hot Spot 3,16,16
  131.   Bob 4,XW+4,(YH-14)+N,3 : Next N : Bob Off 4 : Goto ENY
  132.   HIT:
  133.   RN=Rnd(1)+1
  134.   Bob BB,XW-13,YH-14,RN
  135.   Noise To 15
  136.   Volume 5,63 : Mvolume 32
  137.   Set Envel 0,0 To 1,63
  138.   Set Envel 0,1 To 10,0
  139.   Play 50,53,0
  140.   ENY:
  141.   X=XW : Y=YH
  142. End Proc
  143. Procedure SCORE
  144.   A=X : B=Y
  145.   A=-95+A
  146.   B=B-13
  147.   B=95-B
  148.   X#=A : Y#=B
  149.   R=Sqr((A*A)+(B*B))
  150.   If X#=0 Then X#=1
  151.   If Y#=0 Then Y#=1
  152.   D#=Y#/X#
  153.   Degree 
  154.   D#=Atan(D#)
  155.   If X#>0 and Y#>0 Then D#=D#
  156.   If X#<0 and Y#>0 Then D#=180+D#
  157.   If X#<0 and Y#<0 Then D#=180+D#
  158.   If X#>0 and Y#<0 Then D#=360+D#
  159.   '  SCORE 
  160.   If D#>351 or D#<=9 Then SC=6
  161.   If D#>9 and D#<=27 Then SC=13
  162.   If D#>27 and D#<=45 Then SC=4
  163.   If D#>45 and D#<=63 Then SC=18
  164.   If D#>63 and D#<=81 Then SC=1
  165.   If D#>81 and D#<=99 Then SC=20
  166.   If D#>99 and D#<=117 Then SC=5
  167.   If D#>117 and D#<=135 Then SC=12
  168.   If D#>135 and D#<=153 Then SC=9
  169.   If D#>153 and D#<=171 Then SC=14
  170.   If D#>171 and D#<=189 Then SC=11
  171.   If D#>189 and D#<=207 Then SC=8
  172.   If D#>207 and D#<=225 Then SC=16
  173.   If D#>225 and D#<=243 Then SC=7
  174.   If D#>243 and D#<=261 Then SC=19
  175.   If D#>261 and D#<=279 Then SC=3
  176.   If D#>279 and D#<=297 Then SC=17
  177.   If D#>297 and D#<=315 Then SC=2
  178.   If D#>315 and D#<=333 Then SC=15
  179.   If D#>333 and D#<=351 Then SC=10
  180.   BMUL=SC
  181.   HIT=3
  182.   If R<4 Then SC=50 : HIT=1
  183.   If R>=4 and R<=8 Then SC=25 : HIT=2
  184.   If R=>41 and R<48 Then SC=SC*3 : HIT=4
  185.   If R=>69 and R<76 Then SC=SC*2 : HIT=5
  186.   If R=>76 Then SC=0 : HIT=6
  187.   If MIS=1 Then SC=0 : HIT=6
  188.   Rem
  189.   Locate 0,28 : Print "                                                        "
  190.   'Locate 0,27 : Print "                                                       " 
  191.   'Locate 0,27 : Print "bb=";BB;"   score  ";SC;"    rd   ";R
  192.   Locate 0,28 : Print "cx=";CX;" cy=";CY;"  cd#=";CD#;" cr=";CR;" aim:";AIM
  193.   Locate 0,28 : Print "cx=";CX;" cy=";CY;"  cd#=";CD#;" cr=";CR;" aim:";AIM;"*";TM
  194. End Proc
  195. Procedure RESTART
  196.   FIN=0
  197.   Auto View On 
  198.   Update On 
  199.   Curs Off : Hide On : Screen To Back 2
  200.   Screen To Front 1
  201.   Screen Hide 2 : Screen 1
  202.   For T=1 To 2
  203.   TL(T)=501 : Next T
  204.   TURN=Rnd(1)+1
  205. End Proc
  206. Procedure GAME
  207.   If TL(1)<1 or TL(2)<1 Then Goto IT
  208.   If TURN=1 Then TURN=2 : NT=1 : Goto IT
  209.   If TURN=2 Then TURN=1 : NT=2
  210.   IT:
  211. End Proc
  212. '
  213. GAME:
  214.   GAME
  215.   Do 
  216.     BB=0 : SC=0 : TL=0
  217.     Wait 10
  218.     BUT: If Mouse Key=1 Then Goto NO
  219.     Goto BUT
  220.     NO:
  221.     If TL(1)<1 or TL(2)<1 Then Goto FINO
  222.     RESULTS
  223.     Goto CONTROL
  224.   Loop 
  225.   FINO:
  226.   WIN=NT
  227.   If(HIT=5 or HIT=1) and TL(TURN)>-1 Then WIN=TURN
  228.   LEG(WIN)=LEG(WIN)+1
  229.   If LEG/2<LEG(WIN) Then LEG(1)=0 : LEG(2)=0 : SET(WIN)=SET(WIN)+1
  230.   If SET/2<SET(WIN) Then FIN=1 : RESULTS : Goto NEW
  231.   For T=1 To 2
  232.   TL(T)=501 : Next T
  233.   Goto GAME
  234. '
  235. Procedure MENU
  236.   Ink 4
  237. Screen To Back 1
  238.   Screen To Front 2
  239.   Screen Show 2
  240.   Screen 2
  241.   Show On 
  242.   OPTIONS:
  243.   Menu$(1)="Options "
  244.   Menu$(1,1)="One Player"
  245.   If PL=1 Then Menu$(1,1)="One Player <-"
  246.   Menu$(1,2)="Two Player"
  247.   If PL=2 Then Menu$(1,2)="Two Player <-"
  248.   Menu$(2)="Level "
  249.   Menu$(2,1)="Amateur"
  250.   If SK=1 Then Menu$(2,1)="Amateur      <-"
  251.   Menu$(2,2)="Professional"
  252.   If SK=2 Then Menu$(2,2)="Professional <-"
  253.   Menu$(3)="Game "
  254.   Menu$(3,1)="Start"
  255.   Menu$(3,2)="Practice"
  256.   Menu$(3,3)="Quit"
  257.   Menu$(5)="Opponent "
  258.   For N=1 To 8
  259.     Menu$(5,N)=N$(N+1) : If N=OP Then Menu$(5,N)=N$(N+1)+" <-"
  260.   Next N
  261.   Menu$(4)="Setup "
  262.   Menu$(4,1)="Legs"
  263.   Menu$(4,2)="Sets"
  264.   Menu$(4,1,1)="3 Legs"
  265.   If LEG=3 Then Menu$(4,1,1)="3 Legs <-"
  266.   Menu$(4,1,2)="4 Legs"
  267.   If LEG=4 Then Menu$(4,1,2)="4 Legs <-"
  268.   Menu$(4,1,3)="5 Legs"
  269.   If LEG=5 Then Menu$(4,1,3)="5 Legs <-"
  270.   Menu$(4,2,1)="1 Sets"
  271.   If SET=1 Then Menu$(4,2,1)="1 Sets <-"
  272.   Menu$(4,2,2)="3 Sets"
  273.   If SET=3 Then Menu$(4,2,2)="3 Sets <-"
  274.   Menu$(4,2,3)="5 Sets"
  275.   If SET=5 Then Menu$(4,2,3)="5 Sets <-"
  276.   Menu$(4,2,4)="7 Sets"
  277.   If SET=7 Then Menu$(4,2,4)="7 Sets <-"
  278.   Menu$(4,2,5)="9 Sets"
  279.   If SET=9 Then Menu$(4,2,5)="9 Sets <-"
  280.   Menu$(4,2,6)="11 Sets"
  281.   If SET=11 Then Menu$(4,2,6)="11 Sets<-"
  282.   On Menu Goto SELECT,SELECT,GAM,SETU,OPER
  283.   On Menu On 
  284.   Menu On 
  285.   Wait Key 
  286.   SELECT:
  287.   If Choice(1)=1 Then PL=Choice(2) : If PL=2 Then OP=1
  288.   If Choice(1)=1 Then If PL=1 Then OP=2
  289.   If Choice(1)=2 Then SK=Choice(2)
  290.   On Menu On 
  291.   Goto OPTIONS
  292.   Menu$(4,2,6)="11 Sets"
  293.   If SET=11 Then Menu$(4,2,6)="11 Sets<-"
  294.   On Menu Goto SELECT,SELECT,GAM,SETU,OPER
  295.   On Menu On 
  296.   Menu On 
  297.   Wait Key 
  298.   GAM:
  299.   If Choice(2)=1 Then Pop Proc
  300.   If Choice(2)=2 Then PR=1 : Pop Proc
  301.   If Choice(2)=3 Then Stop 
  302.   On Menu On 
  303.   Goto OPTIONS
  304.   OPER:
  305.   OP=Choice(2) : If OP=1 Then PL=2
  306.   If OP>1 Then PL=1
  307.   On Menu On 
  308.   Goto OPTIONS
  309.   SETU:
  310.   If Choice(2)=1 Then LEG=Choice(3)+2
  311.   If Choice(2)=2 Then SET=(Choice(3)*2)-1
  312.   On Menu On 
  313.   Goto OPTIONS
  314. End Proc
  315. '
  316. CONTROL:
  317.   TDS=0 : BB=0
  318.   Do 
  319.     BB=BB+1
  320.     If BB=4 Then Goto GAME
  321.     If BB=1 Then Bob Off D(1) : Bob Off D(2) : Bob Off D(3)
  322.     SC=0 : BMUL=0
  323.     Gosub POSITION
  324.     SCORE
  325.     TDS=TDS+SC
  326.     D(BB)=BB
  327.     If MIS=1 Then D(BB)=0
  328.     RESULTS
  329.     If TL(1)<1 or TL(2)<1 and BB<3 Then Goto FINO2
  330.   Loop 
  331.   FINO2:
  332.   For N=BB+1 To 3
  333.   Bob N,300,300,2 : Next N
  334.   BB=4 : 
  335.   Goto GAME
  336. '
  337. '
  338. Procedure RESULTS
  339.   TL(TURN)=TL(TURN)-SC
  340.   Paper 0 : Pen 5
  341.   Print At(30,6);"     "
  342.   Print At(30,10);"     "
  343.   Locate 0,29 : Centre "                                  "
  344.   If FIN=1 Then Locate 0,29 : Centre "Winner is"+N$(WIN) : Pop Proc
  345.   Locate 0,29 : Centre N$(1)+"    V    "+N$(OP+1)
  346.   Pen 11
  347.   If TURN=1 Then Print At(17,29);"<"
  348.   If TURN=2 Then Print At(21,29);">"
  349.   Print At(29,18);SET(1);At(32,18);SET(2)
  350.   Print At(29,23);LEG(1);At(32,23);LEG(2)
  351.   Print At(30,4);"Score";At(30,6);SC
  352.   Print At(30,8);"Total";At(30,10);TDS
  353.   A=0 : If TL(1)<100 Then A=1
  354.   If TL(1)<10 Then A=2
  355.   Print At(2,29);"   ";At(32,29);"   "
  356.   Print At(2+A,29);TL(1);At(32,29);TL(2)
  357. End Proc
  358. Procedure COMPO
  359.    T=TL(TURN) : D=4-BB : OT=TL(NT)
  360.    R=Rnd(20) : O=Rnd(11) : OO=Rnd(20) : AIM=0
  361.    '
  362.    TM=3
  363.    If TL(TURN)<175 Then Goto SKIPY
  364. '
  365.    If R<17 Then AIM=20 : Goto FIN
  366.    If R>16 Then AIM=19 : If R=20 and O<3 Then AIM=50 : TM=1 : Goto FIN
  367. '
  368. SKIPY:
  369. A=7 : N=20 : M=20 : AA=Rnd(8)+1
  370. If DD=3 Then 
  371.  Do 
  372.  If T-((N*2)-(M*3)-(A*3))=0 Then AIM=M : TM=3 : Goto FIN
  373.  A=A+1 : If A=20 Then A=7 : M=M-1 : If M=6 Then M=20 : N=N-1 : If N=AA Then Goto SKIPY1
  374.  Loop 
  375. '
  376.  N=20 : M=7 : AA=Rnd(5)+1
  377. If DD=2 Then 
  378.  Do 
  379.  If T-(N*2)-(M*3)=0 Then AIM=M : TM=3 : Goto FIN
  380.  M=M+1 : If M=21 Then M=7 : N=N-1 : If N=AA Then Goto SKIPY1
  381.  Loop 
  382. '
  383.  M=20
  384. If DD=1 Then 
  385.  Do 
  386.  If T-M=50 and Rnd(10)<3 Then AIM=M : TM=1 : Goto FIN
  387.  M=M-1 : If M=0 Then Goto SKIPY1
  388.  Loop 
  389. '
  390. SKIPY1:
  391.    For N=1 To 20
  392.    If N*2=T Then AIM=N : TM=2
  393.    Next N
  394.    If T=50 and O<9 Then AIM=50 : TM=1
  395.    If AIM>0 Then Goto FIN
  396. '
  397.   If T<61 or OO<10 Then Goto SKIP2
  398.    M=20 : N=20 : AA=3 : A=Rnd(9)+6
  399.    Do 
  400.       If T-((N*AA)-(M*2))=0 Then AIM=N : TM=3 : Goto FIN
  401.       AA=AA+1 : If AA>6 Then AA=1 : M=M-1 : If M=AA Then M=20 : N=N-1
  402.       If N=10 Then Goto SKIP2
  403.    Loop 
  404. '
  405. SKIP2:
  406. If D<3 Then Goto SKIP3
  407.    M=1 : N=20 : A=3
  408.    Do 
  409.       If T-(N*2)-(20+M)=0 Then AIM=M : TM=1 : Goto FIN
  410.       N=N-1 : If N=0 Then M=M-1 : N=20
  411.       If M=0 Then Goto FIN
  412.    Loop 
  413. '
  414. SKIP3:
  415.    M=1 : N=20 : A=0
  416.    If D=2 and OO>10 Then A=20
  417.    If D=3 and OO>10 Then A=40
  418.    Do 
  419.       If T-(N*2)-(M+A)=0 Then AIM=M : TM=1 : Goto FIN
  420.       N=N-1 : If N=0 Then M=M+1 : N=20 : 
  421.       If M=21+A Then Goto FIN
  422.    Loop 
  423.    FIN:
  424.    If T-(AIM*TM)>0 and AIM*TM<21 Then AIM=AIM*TM : TM=1
  425.    If AIM=0 Then AIM=Rnd(19)+1
  426. '
  427.    If AIM=6 Then CD#=351+9
  428.    If AIM=13 Then CD#=9+9
  429.    If AIM=4 Then CD#=27+9
  430.    If AIM=18 Then CD#=45+9
  431.    If AIM=1 Then CD#=63+9
  432.    If AIM=20 Then CD#=81+9
  433.    If AIM=5 Then CD#=99+9
  434.    If AIM=12 Then CD#=117+9
  435.    If AIM=9 Then CD#=135+9
  436.    If AIM=14 Then CD#=153+9
  437.    If AIM=11 Then CD#=171+9
  438.    If AIM=8 Then CD#=189+9
  439.    If AIM=16 Then CD#=207+9
  440.    If AIM=7 Then CD#=225+9
  441.    If AIM=19 Then CD#=243+9
  442.    If AIM=3 Then CD#=261+9
  443.    If AIM=17 Then CD#=279+9
  444.    If AIM=2 Then CD#=297+9
  445.    If AIM=15 Then CD#=315+9
  446.    If AIM=10 Then CD#=333+9
  447.    CR=Rnd(76)
  448.    If AIM=50 Then CR=Rnd(4)
  449.    If AIM=25 Then CR=Rnd(9)+4
  450.    If TM=3 Then CR=41+Rnd(7)
  451.    If TM=2 Then CR=70+Rnd(7)
  452.    P=Rnd(10)
  453.    If TM=1 and P<8 Then CR=47+Rnd(24)
  454.    If TM=1 and P>7 Then CR=9+Rnd(32)
  455.    Degree 
  456.    CX=CR*(Cos(CD#))
  457.    CY=CR*(Sin(CD#))
  458.    CX=CX+95+2
  459.    CY=108-CY
  460.    AA=Rnd(1) : 
  461.    RX=Rnd(7-OP+D) : RY=4-Rnd(7-OP+D)
  462.    If AA=1 Then CX=CX+RX : CY=CY+RY
  463.    If AA=0 Then CX=CX-RX : CY=CY-RY
  464. End Proc